#include <iostream>
#include <future>
#include <thread>
#include <memory>

int Add(int num1, int num2)
{
    std::cout << "into add!\n";
    return num1 + num2;
}

int main()
{
    // 构造一个指向<std::packaged_task<int(int, int)>类型的可调用对象的智能指针

    auto task = std::make_unique<std::packaged_task<int(int, int)>>(Add);
    
    std::future<int> res= task->get_future();

    //创建线程执行可调用对象
    std::thread th([&task](){      /*因为task指向的可调用对象有两个参数，里面的是可调用对象的执行过程，而不是具体的哪个可调用对象*/
        (*task)(10,20);
    });

    th.join();
    return 0;
}